#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
IR await表达式节点定义
"""

import ast
from dataclasses import dataclass, field
from typing import Iterator
from .base import IRExpr


@dataclass
class IRAwait(IRExpr):
    """异步等待表达式节点
    
    表示Python的await表达式，用于等待future完成。
    
    示例:
        result = await some_async_call()
        
    属性:
        value: 被await的表达式（应该返回future类型）
    """
    
    value: IRExpr = field(default=None)  # type: ignore
    
    # 类属性
    node_type: str = "await"
    
    def get_child_nodes(self) -> Iterator[IRExpr]:
        """获取所有子节点"""
        if self.value:
            yield self.value
        yield from super().get_child_nodes()
    
    def build_from_ast(self, node: ast.Await) -> None:
        """从AST的Await节点构建IR节点
        
        Args:
            node: AST的Await节点
        """
        super().build_from_ast(node)
        
        # 构建被await的表达式
        from . import build_expr_from_ast
        if node.value:
            self.value = build_expr_from_ast(node.value, parent=self)

